package net;

import java.io.*;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 * 聊天的客户端对象
 */
public class MapChatClient01 {
    private Socket socket;
    public MapChatClient01(){
        try {
            System.out.println("客户端启动...");
            socket = new Socket("127.0.0.1", 8088);
        }catch (IOException e){
            e.printStackTrace();
            System.exit(1);
        }
    }
    public void start(){
        Scanner sc=null;
        PrintWriter pw=null;
        BufferedReader br=null;
        try {
            //1.获取输出流，输入流对象，能够一次读写一行
            pw = new PrintWriter(
                    new BufferedWriter(
                            new OutputStreamWriter(
                                    socket.getOutputStream(), StandardCharsets.UTF_8)),true);

            //构建Scanner负责读取键盘数据写入到服务端
            sc=new Scanner(System.in);
            while(true){
              System.out.println("请输入用户昵称");
              String nickName=sc.nextLine();
              if(nickName.trim().isEmpty()) {
                  System.out.println("昵称不能为空");
                  continue;
              }
              pw.println(nickName);
              break;
            }
            //2.读写数据
            //启动新的线程专门负责读取服务端的数据
            new Thread(new ServerHandler()).start();
            System.out.println("请输入数据:");
            while(true) {
                String content=sc.nextLine();//这个方法是一个阻塞式方法，没有输入就会在这里阻塞
                if("exit".equalsIgnoreCase(content))break;
                pw.println(content);
            }
        }catch (IOException e){
            e.printStackTrace();
        } finally{
            //3.释放资源
            if(pw!=null)pw.close();
            if(sc!=null)sc.close();
            if(socket!=null)try{socket.close();}catch (IOException e){e.printStackTrace();}
        }
    }
    //构建客户端任务类型，负责处理服务端返回的数据
    private class ServerHandler implements Runnable{
        public void run(){
           BufferedReader  br=null;
           try {
               br = new BufferedReader(
                       new InputStreamReader(
                               socket.getInputStream(), StandardCharsets.UTF_8));
               //读取服务端返回的数据
               String content=null;
               while((content=br.readLine())!=null) {
                   System.out.println(content);
               }
           }catch (IOException e){
               e.printStackTrace();
           }
        }
    }

    public static void main(String[] args) {
        new MapChatClient01().start();
    }
}
